package it.webflora.dao;

import it.webflora.entity.Regione;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class RegioneDao {

	private int idRegione;
	private String descrizione;
	private int idAreaGeografica;
	private PreparedStatement pstm = null;
	private Connection conn = null;
	private ResultSet resultSet = null;
	private DbConnection connection;

	public RegioneDao() {
	}

	// Code Auto-generated

	public RegioneDao(int idRegione, String descrizione, int idAreaGeografica) {
		this.idRegione = idRegione;
		this.descrizione = descrizione;
		this.idAreaGeografica = idAreaGeografica;
	}

	public void setId_regione(int id_regione) {
		this.idRegione = idRegione;
	}

	// Code Auto-generated

	public int getIdRegione() {
		return idRegione;
	}

	// Code Auto-generated

	public void setDescrizione(String descrizione) {
		this.descrizione = descrizione;
	}

	// Code Auto-generated

	public String getDescrizione() {
		return descrizione;
	}

	// Code Auto-generated

	public void setId_area_geografica(int idAreaGeografica) {
		this.idAreaGeografica = idAreaGeografica;
	}

	// Code Auto-generated

	public int getIdAreaGeografica() {
		return idAreaGeografica;
	}

	// Code Auto-generated

	public List<Regione> resultSetRegione() {

		List<Regione> listRegione = new ArrayList<Regione>();
		;
		Regione regione;
		String query = "SELECT * FROM regione";
		try {
			pstm = getPreparedStatement(query);
			resultSet = pstm.executeQuery();

			while (resultSet.next()) {
				regione = new Regione();
				regione.setDescrizione(resultSet.getString("descrizione")
						.toString());
				regione.setIdregione(resultSet.getInt("id_regione"));
				regione.setIdAreaGeografica(resultSet
						.getInt("id_area_geografica"));
				listRegione.add(regione);

			}
		} catch (SQLException ex) {
			ex.printStackTrace();
		}
		return listRegione;
	}

	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return super.toString();
	}

	public void getInsertSave() {
		String query = "INSERT INTO regione VALUES(?,?,?)";

		try {
			pstm = getPreparedStatement(query);
			pstm.setInt(1, getIdRegione());
			pstm.setString(2, getDescrizione());
			pstm.setInt(3, getIdAreaGeografica());
			pstm.executeUpdate();

		} catch (SQLException ex) {
			ex.printStackTrace();
		} finally {
			closeSession();
		}
	}

	public void saveUpdate(String id) {
		String query = "UPDATE regione SET id_regione=?,descrizione=?,id_area_geografica=? WHERE id_regioneid_area_geografica='"
				+ id + "'";

		try {
			pstm = getPreparedStatement(query);

			pstm.setInt(1, getIdRegione());
			pstm.setString(2, getDescrizione());
			pstm.setInt(3, getIdAreaGeografica());
			pstm.executeUpdate();

		} catch (SQLException ex) {
			ex.printStackTrace();
		} finally {
			closeSession();
		}
	}

	public void delete(String id) {
		String query = "DELETE FROM regione WHERE id_regioneid_area_geografica='"
				+ id + "'";
		try {
			pstm = getPreparedStatement(query);
			pstm.executeUpdate();

		} catch (SQLException ex) {
			ex.printStackTrace();
		} finally {
			closeSession();
		}
	}

	public PreparedStatement getPreparedStatement(String query) {
		try {

			Class.forName("com.mysql.jdbc.Driver");
			conn = DriverManager.getConnection(
					"jdbc:mysql://localhost/webflora", "root", "");
			pstm = conn.prepareStatement(query);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException ex) {
			ex.printStackTrace();
		}
		return pstm;
	}

	public void closeSession() {
		try {
			conn.close();
			pstm.close();
			if (resultSet != null) {
				resultSet.close();
			}
		} catch (SQLException ex) {
			ex.printStackTrace();
		}
	}

}
